package com.itheima.stock.stream;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;

/**
 *Stream流的三类方法
 *
 * - 获取Stream流
 *   - 创建一条流水线，并把数据放到流水线上准备进行操作
 * - 中间方法
 *   - 流水线上的操作。
 *   - 一次操作完毕之后，还可以继续进行其他操作
 * - 终结方法
 *   - 一个Stream流只能有一个终结方法
 *   - 是流水线上的最后一个操作
 */
 /*
    Stream流中三类方法之一 :  获取方法

    1 单列集合
       可以使用Collection接口中的默认方法stream()生成流
       default Stream<E> stream()
    2 双列集合
        双列集合不能直接获取 , 需要间接的生成流
        可以先通过keySet或者entrySet获取一个Set集合，再获取Stream流
    3 数组
       Arrays中的静态方法stream生成流
   */
@SpringBootTest
public class StreamDemo2 {

    @Test
    public void method1(){
        /**
         *  Arrays中的静态方法stream生成流
         */
        int[] arr = {1, 2, 3, 4, 5, 6};
        Arrays.stream(arr).forEach(s -> System.out.println(s));

    }
    @Test
    public void method2(){
        /**
         * 双列集合不能直接获取 , 需要间接的生成流
         * 可以先通过keySet或者entrySet获取一个Set集合，再获取Stream流
         */
        HashMap<String, String> hm = new HashMap<>();
        hm.put("it001", "曹植");
        hm.put("it002", "曹丕");
        hm.put("it003", "曹熊");
        hm.put("it004", "曹冲");
        hm.put("it005", "曹昂");
        //获取Stream流打印集合
        hm.entrySet().stream().forEach(s -> System.out.println(s));
        //获取Stream流打印键
        hm.keySet().stream().forEach(key -> System.out.println( key ));
    }
    @Test
    public void method3(){
        /**
         * 可以使用Collection接口中的默认方法stream()生成流
         * default Stream<E> stream()
         */
        ArrayList<String> list = new ArrayList<>();
        list.add("迪丽热巴");
        list.add("古力娜扎");
        list.add("马尔扎哈");
        list.add("欧阳娜娜");
        list.stream().forEach(start-> System.out.println(start));
    }


}
